
<html><head>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<meta content="text/javascript" http-equiv="content-script-type">
<title>system.threading.ThreadUtility</title>
<link rel="stylesheet" type="text/css" href="candydoc/style.css">
<!--[if lt IE 7]><link rel="stylesheet" type="text/css" href="candydoc/ie56hack.css"><![endif]-->
<script language="JavaScript" src="candydoc/util.js" type="text/javascript"></script>
<script language="JavaScript" src="candydoc/tree.js" type="text/javascript"></script>
<script language="JavaScript" src="candydoc/explorer.js" type="text/javascript"></script>
</head><body>
<div id="tabarea"></div><div id="explorerclient"></div>
<div id="content"><script>explorer.initialize("system.threading.ThreadUtility");</script>
	<table class="content">
		<tr><td id="docbody"><h1>system.threading.ThreadUtility</h1><!-- Generated by Ddoc from F:\MyWork\phoenix\source\system\threading\ThreadUtility.d -->
该模块定义了一些线程操作。
<br><br>
<b>License:</b><br>
BSD
<br><br>
<b>Authors:</b><br>
Lucifer (786325481@QQ.com)
<br><br>


<script>explorer.outline.incSymbolLevel();</script>
<dl>
<script>explorer.outline.writeEnabled = true;</script>
<dt><span class="decl">void 
<span class="currsymbol">sleep</span>
<script>explorer.outline.addDecl('sleep');</script>

(uint <span class="funcparam">milliseconds</span>);
</span></dt>
<script>explorer.outline.writeEnabled = false;</script>


<dd>将当前线程阻塞指定的毫秒数。
<br><br>
<b>Params:</b><br>
<table></table><br>
<b>Comments:</b><br>
线程不会按操作系统的计划在指定的时段内执行。
           在 Windows 平台上此方法不执行标准的 COM 和 SendMessage 消息泵处理。
           0 值会使线程放弃剩下的时间片。可以参考 yield 方法。
 
<br><br>

</dd>

<script>explorer.outline.writeEnabled = true;</script>
<dt><span class="decl">void 
<span class="currsymbol">yield</span>
<script>explorer.outline.addDecl('yield');</script>

();
</span></dt>
<script>explorer.outline.writeEnabled = false;</script>


<dd>它相当于 std.thread 中 Thread.
<span class="currsymbol">yield</span>
<script>explorer.outline.addDecl('yield');</script>

 方法。
<br><br>
<b>Comments:</b><br>
std.thread 中 Thread.
<span class="currsymbol">yield</span>
<script>explorer.outline.addDecl('yield');</script>

 方法在 Windows 上
           的实现采用了 Sleep(0) ，并不高效，而且存在
           优先级反向问题。这里采用 SwitchToThread 方法。
 
<br><br>

</dd>

<script>explorer.outline.writeEnabled = true;</script>
<dt><span class="decl">void 
<span class="currsymbol">spinWait</span>
<script>explorer.outline.addDecl('spinWait');</script>

(int <span class="funcparam">iterations</span>);
</span></dt>
<script>explorer.outline.writeEnabled = false;</script>


<dd>导致线程等待由 <span class="funcparam">iterations</span> 参数定义的时间量。
<br><br>
<b>Parmas:</b><br>
<span class="funcparam">iterations</span> -&gt; 定义线程等待时间的 32 位有符号整数。

<br><br>
<b>Comments:</b><br>

<span class="currsymbol">spinWait</span>
<script>explorer.outline.addDecl('spinWait');</script>

 方法在实现锁定方面十分有用。
           
<span class="currsymbol">spinWait</span>
<script>explorer.outline.addDecl('spinWait');</script>

 实质上会将处理器置于十分紧密的循环中，其循环计数由 <span class="funcparam">iterations</span> 参数指定。
           因此，等待的持续时间取决于处理器的速度。
<br><br>

           针对这一点，将此方法与 sleep 方法进行对比。
           调用 sleep 的线程会放弃其处理器时间当前片断的剩余部分，
           即使指定的时间间隔为零也不例外。
           如果为 sleep 指定非零的时间间隔，则线程计划程序会不考虑该线程，直到该时间间隔结束。
<br><br>

           
<span class="currsymbol">spinWait</span>
<script>explorer.outline.addDecl('spinWait');</script>

 并不广泛适用于普通应用程序。

<br><br>
<b>Note:</b><br>
在避免上下文切换可带来益处的极少数情况下（例如，当已知即将发生状态更改时），
                 应在循环中调用 
<span class="currsymbol">spinWait</span>
<script>explorer.outline.addDecl('spinWait');</script>

 方法。
                 
<span class="currsymbol">spinWait</span>
<script>explorer.outline.addDecl('spinWait');</script>

 执行的代码旨在防止可能在多处理器计算机上发生的问题。
                 例如，在具有多个采用 Hyper-Threading™ 技术的Intel™ 处理器的计算机上，
                 
<span class="currsymbol">spinWait</span>
<script>explorer.outline.addDecl('spinWait');</script>

 可防止在某些情况下出现处理器占用不足的现象。
<br><br>

           
<span class="currsymbol">spinWait</span>
<script>explorer.outline.addDecl('spinWait');</script>

很少被使用，它的作用是等待一个在极短时间（可能小于一微秒）内可准备好的可预期的资源，
           而不用调用sleep方法阻止线程而浪费CPU时间。不过，这种技术的优势只有在多处理器计算机：
           对单一处理器的电脑，直到轮询的线程结束了它的时间片之前,一个资源没有机会改变状态，这有违它的初衷。
           并且调用
<span class="currsymbol">spinWait</span>
<script>explorer.outline.addDecl('spinWait');</script>

经常会花费较长的时间这本身就浪费了CPU时间。
 
<br><br>

</dd>
</dl>
<script>explorer.outline.decSymbolLevel();</script>


</td></tr>
		<tr><td id="docfooter">
			Page was generated with
			<img src="candydoc/img/candydoc.gif" style="vertical-align:middle; position:relative; top:-1px">
			on Sat Nov 29 22:33:13 2008

		</td></tr>
	</table>
</div>
<script>
	explorer.packageExplorer.addModule("platform.PAL");
	explorer.packageExplorer.addModule("platform.windows.Core");
	explorer.packageExplorer.addModule("platform.linux.Core");
	explorer.packageExplorer.addModule("system.Array");
	explorer.packageExplorer.addModule("system.BitArray");
	explorer.packageExplorer.addModule("system.Environment");
	explorer.packageExplorer.addModule("system.Event");
	explorer.packageExplorer.addModule("system.Exception");
	explorer.packageExplorer.addModule("system.Hash");
	explorer.packageExplorer.addModule("system.IntPtr");
	explorer.packageExplorer.addModule("system.Random");
	explorer.packageExplorer.addModule("system.Traits");
	explorer.packageExplorer.addModule("system.TypeTuple");
	explorer.packageExplorer.addModule("system.math.IEEE");
	explorer.packageExplorer.addModule("system.math.Math");
	explorer.packageExplorer.addModule("system.runtime.c.complex");
	explorer.packageExplorer.addModule("system.runtime.c.config");
	explorer.packageExplorer.addModule("system.runtime.c.ctype");
	explorer.packageExplorer.addModule("system.runtime.c.errno");
	explorer.packageExplorer.addModule("system.runtime.c.fenv");
	explorer.packageExplorer.addModule("system.runtime.c.inttypes");
	explorer.packageExplorer.addModule("system.runtime.c.limits");
	explorer.packageExplorer.addModule("system.runtime.c.locale");
	explorer.packageExplorer.addModule("system.runtime.c.math");
	explorer.packageExplorer.addModule("system.runtime.c.signal");
	explorer.packageExplorer.addModule("system.runtime.c.stdarg");
	explorer.packageExplorer.addModule("system.runtime.c.stddef");
	explorer.packageExplorer.addModule("system.runtime.c.stdint");
	explorer.packageExplorer.addModule("system.runtime.c.stdio");
	explorer.packageExplorer.addModule("system.runtime.c.stdlib");
	explorer.packageExplorer.addModule("system.runtime.c.string");
	explorer.packageExplorer.addModule("system.runtime.c.time");
	explorer.packageExplorer.addModule("system.runtime.c.wctype");
	explorer.packageExplorer.addModule("system.text.UTF");
	explorer.packageExplorer.addModule("system.threading.Atomic");
	explorer.packageExplorer.addModule("system.threading.ThreadUtility");
	explorer.packageExplorer.addModule("system.threading.synchronization.SpinWait");
	explorer.packageExplorer.addModule("system.collections.ArrayList");
	explorer.packageExplorer.addModule("system.collections.Comparer");
	explorer.packageExplorer.addModule("system.collections.Deque");
	explorer.packageExplorer.addModule("system.collections.EqualityComparer");
	explorer.packageExplorer.addModule("system.collections.Exception");
	explorer.packageExplorer.addModule("system.collections.HashMap");
	explorer.packageExplorer.addModule("system.collections.HashSet");
	explorer.packageExplorer.addModule("system.collections.ICollection");
	explorer.packageExplorer.addModule("system.collections.IComparer");
	explorer.packageExplorer.addModule("system.collections.IDeque");
	explorer.packageExplorer.addModule("system.collections.IEnumerable");
	explorer.packageExplorer.addModule("system.collections.IEnumerator");
	explorer.packageExplorer.addModule("system.collections.IEqualityComparer");
	explorer.packageExplorer.addModule("system.collections.IList");
	explorer.packageExplorer.addModule("system.collections.IMap");
	explorer.packageExplorer.addModule("system.collections.IQueue");
	explorer.packageExplorer.addModule("system.collections.LinkedList");
	explorer.packageExplorer.addModule("system.collections.Pair");
	explorer.packageExplorer.addModule("system.collections.PrimeHelper");
	explorer.packageExplorer.addModule("system.collections.PriorityQueue");
	explorer.packageExplorer.addModule("system.collections.Queue");
	explorer.packageExplorer.addModule("system.collections.RBTree");
	explorer.packageExplorer.addModule("system.collections.Stack");
	explorer.packageExplorer.addModule("system.collections.TreeMap");
	explorer.packageExplorer.addModule("system.collections.TreeSet");
	explorer.packageExplorer.addModule("system.collections.objectmodel.ListCollection");
	explorer.packageExplorer.addModule("system.collections.objectmodel.ReadOnlyListCollection");</script>
</body></html>


